﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Devart.Data.PostgreSql;
using System.Data;

namespace Sistema_financiero.Entidades
{
    public class Cliente
    {
        public int ID { get; set; }
        public string Apellido { get; set; }
        public string Nombres { get; set; }
        public string Domicilio { get; set; }
        public string Telefono1 { get; set; }
        public string Telefono2 { get; set; }
        public string Telefono3 { get; set; }
        public int Id_localidad { get; set; }
        public string Localidad { get; set; }
        public int Id_tipo_doc { get; set; }
        public int Num_doc { get; set; }
        public int Id_estado_civil { get; set; }
        public DateTime Fecha_nacimiento { get; set; }
        public string Padre { get; set; }
        public string Madre { get; set; }
        public string Conyuge { get; set; }
        public string Observacion { get; set; }
        public int Id_situacion_iva { get; set; }
        public int Id_cond_sellado { get; set; }
        public int Id_tipo_cuenta { get; set; }
        public string Detalle_titulares { get; set; }
        public string Lugar_trabajo { get; set; }
        public int? Legajo { get; set; }
        public decimal? Sueldo { get; set; }
        public int Id_sexo { get; set; }
        public DateTime Fecha_ingreso { get; set; }
        public bool Estado { get; set; }

        public static int Obtener_id_cliente()
        {
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                Cliente item = new Cliente();
                conexion.Unicode = true;
                conexion.Open();
                string sql = "SELECT * FROM obtener_id_cliente";
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                reader.Read();
                if (reader.IsDBNull(0) == false)
                {
                    item.ID = Convert.ToInt32(reader[0]);
                }

                conexion.Close();

                if (item != null)
                {
                    return item.ID + 1;
                }
                else
                {
                    return 1;
                }
            }

        }

        public static void Insertar_nuevo_cliente(string ap, string nomb, string dom, string tel1, string tel2, string tel3, int loc,
            int t_doc, int doc, int e_civ, DateTime nac, string padre, string madre, string cony, string obs,
            int iva, int sellad, int cuenta, string det_tit, string l_trab, string legaj, string sueldo, int sexo)
        {
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                conexion.Open();
                string sql = String.Format("INSERT INTO \"Cliente\" (\"apellido\", \"nombres\", \"domicilio\", \"telefono_1\", \"telefono_2\", \"telefono_3\", \"id_localidad\", \"id_tipo_doc\", \"num_doc\", \"id_estado_civil\", \"fecha_nacimiento\", \"padre\", \"madre\", \"conyuge\", \"observacion\", \"id_situacion_iva\", \"id_cond_sellado\", \"id_tipo_cuenta\", \"detalle_titulares\", \"lugar_trabajo\", \"legajo\", \"sueldo\", \"id_sexo\",\"estado\") VALUES ('{0}','{1}', {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, '{10}', {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, 't')", 
                    ap, nomb, dom, tel1, tel2, tel3, loc, t_doc, doc, e_civ, (nac.ToString("d")), padre, madre, cony, obs, iva, sellad, cuenta, det_tit, l_trab, legaj, sueldo, sexo);
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                reader.Read();
                conexion.Close();
            }


        }

        public static void ActualizarCliente(int id_cliente, string ap, string nomb, string dom, string tel1, string tel2, string tel3, int loc,
            int t_doc, int doc, int e_civ, DateTime nac, string padre, string madre, string cony, string obs,
            int iva, int sellad, int cuenta, string det_tit, string l_trab, string legaj, string sueldo, int sexo)
        {
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                conexion.Open();
                string sql = String.Format("UPDATE \"Cliente\" SET \"apellido\" = '{0}', \"nombres\" = '{1}', \"domicilio\" = {2}, \"telefono_1\" = {3}, \"telefono_2\" = {4}, \"telefono_3\" = {5}, \"id_localidad\" = '{6}', \"id_tipo_doc\" = '{7}', \"num_doc\" = '{8}', \"id_estado_civil\" = '{9}', \"fecha_nacimiento\" = '{10}', \"padre\" = {11}, \"madre\" = {12}, \"conyuge\" = {13}, \"observacion\" = {14}, \"id_situacion_iva\" = '{15}', \"id_cond_sellado\" = '{16}', \"id_tipo_cuenta\" = '{17}', \"detalle_titulares\" = {18}, \"lugar_trabajo\" = {19}, \"legajo\" = {20}, \"sueldo\" = {21}, \"id_sexo\" = '{22}',\"estado\" = 't' WHERE id_cliente = "+Convert.ToString(id_cliente),
                    ap, nomb, dom, tel1, tel2, tel3, loc, t_doc, doc, e_civ, (nac.ToString("d")), padre, madre, cony, obs, iva, sellad, cuenta, det_tit, l_trab, legaj, sueldo, sexo);
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                reader.Read();
                conexion.Close();
            }


        }
        public static List<Cliente> Obtener_Todos_Clientes()
        {
            List<Cliente> lista = new List<Cliente>();
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                conexion.Unicode = true;
                conexion.Open();
                string sql = "SELECT * FROM obtener_todos_clientes";
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    lista.Add(Cargar_Todos_Clientes(reader));
                }
                conexion.Close();
            }
            return lista;
        }


        private static Cliente Cargar_Todos_Clientes(IDataReader reader)
        {
            Cliente item = new Cliente();
            item.ID = Convert.ToInt32(reader[0]);
            item.Nombres = Convert.ToString(reader[1]);
            item.Apellido = Convert.ToString(reader[2]);
            item.Num_doc = Convert.ToInt32(reader[3]);
            item.Domicilio = Convert.ToString(reader[4]);
            item.Localidad = Convert.ToString(reader[5]);
            item.Fecha_ingreso = Convert.ToDateTime(reader[6]);
            item.Id_situacion_iva = Convert.ToInt32(reader[7]);
            return item;
        }

        public static void Insertar_prestamo_garante(int id_prestamo, int id_garante)
        {
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                conexion.Open();
                string sql = "INSERT INTO \"Prestamo_Garante\" VALUES("+Convert.ToString(id_prestamo)+", "+Convert.ToString(id_garante)+")";
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                reader.Read();
                conexion.Close();
            }


        }

    }
}
